package com.itlong.cloud.service;

import com.itlong.cloud.POJO.DTO.smartcard.SmartCardSyncDataPullUserBasisInfoDTO;
import com.itlong.cloud.POJO.DTO.smartcard.SmartCardSyncGetPullDataDTO;
import com.itlong.cloud.POJO.PO.SmartCardPullPO;
import com.itlong.cloud.POJO.PO.TimeTaskPullRemoveRepeatPO;
import com.itlong.cloud.POJO.VO.smartcard.SmartCardPullTableInfoVO;

import java.util.List;

/**
 * <desc>
 *      与旺龙一卡通对接-操作一卡通pull云端的数据的接口
 * </desc>
 *
 * @createDate 2017/11/01
 */
public interface ISmartCardSyncDataPullService {

    /**
     * <desc>
     *      存储项目中各处数据更改点传输过来的数据
     * <desc/>
     *
     * @param  tableName 表名
     * @param smartCardPullPOS 与旺龙一卡通对接数据存储实体对象列表
     * @return
     * @author zhangs
     * @createDate 2017/11/3
     */
    Integer batchSavePullData(String tableName, List<SmartCardPullPO> smartCardPullPOS);



    /**
     * <desc>
     *    保存推送给一卡通的数据.
     * </desc>
     *
     * @param tableName 表名
     * @param smartCardPullPO 待保存的数据
     * @return 受影响的行数
     * @author LewisLouis
     * @createDate 2017-12-21
     */
    Integer savePullData(String tableName, SmartCardPullPO smartCardPullPO);

    /**
     * <desc>
     *      条件查询推送给一卡通的数据
     * </desc>
     * @param tableName 表名
     * @param smartCardPullPO 查询条件
     * @return 受影响的行数
     * @author LewisLouis
     * @createDate 2017-12-21
     */
    List<SmartCardPullPO> getPullData(String tableName, SmartCardPullPO smartCardPullPO);




    /**
     * <desc>
     *    更新推送给一卡通的数据.
     * </desc>
     *
     * @param tableName 表名
     * @param smartCardPullPO 待更新数据
     * @return xx
     * @author LewisLouis
     * @createDate 2017-12-21
     */

    Integer updatePullData(String tableName, SmartCardPullPO smartCardPullPO);



    /**
     * <desc>
     *    根据用户Id获取用户手机号.
     * </desc>
     *
     * @param userId 用户Id
     * @return 用户手机号
     * @author LewisLouis
     * @createDate 2017-12-21
     */
    String getUserPhoneByUserId(String userId);


    /**
     * <desc>
     *     查询App用户项目基本信息-.
     * </desc>
     *
     * @param  projectId 项目Id
     * @param  userId 用户Id
     * @return 查询结果集
     * @author LewisLouis
     * @createDate 2017-12-22
     */
    List<SmartCardSyncDataPullUserBasisInfoDTO> getUserBasisInfo(String projectId, String userId);


    /**
    * <desc>
    *    获取指定类型的未同步数据数据.
    * </desc>
    *
    * @param  smartCardSyncGetPullDataDTO 获取推送给一卡通的数据查询条件对象
    * @return dataType
    * @author LewisLouis
    * @createDate 2017-12-25
    */
    List<SmartCardPullPO> getNotSyncData(SmartCardSyncGetPullDataDTO smartCardSyncGetPullDataDTO);

    /**
     * <desc>
     *     一卡通请求获取云端数据之后云端确认一卡通是否同步成功
     * <desc/>
     *
     * @param projectId 项目Id
     * @param syncSerialNos 同步流水号,逗号分隔
     * @return
     * @author zhangs
     * @createDate 2017/10/31
     */
    void confirmInfo(String projectId, String syncSerialNos);


    /**
     * <desc>
     *     整理Pull表中数据的定时任务获取有数据变动的pull表
     * <desc/>
     *
     * @param mark 数据变动标记 0:无变动 | 1:有变动
     * @return List<TimeTaskPullRemoveRepeatPO> 定时任务临时表数据集
     * @author zhangs
     * @createDate 2017/11/3
     */
    List<TimeTaskPullRemoveRepeatPO> obtainPullTableName(Integer mark);

    /**
     * <desc>
     *     定时任务获取pull表中未处理的数据
     * <desc/>
     *
     * @param smartCardPullPO 查询条件
     * @return List<SmartCardPullPO> 旺龙一卡通需要pull的数据集
     * @author zhangs
     * @createDate 2017/11/3
     */
//    List<SmartCardPullPO> getUntreatedData(SmartCardPullPO smartCardPullPO);

    /**
     * <desc>
     *      根据Id删除对应数据
     * <desc/>
     *
     * @param delPullIds 需要删除的pull表的Id
     * @return
     * @author zhangs
     * @createDate 2017/11/3
     */
    Integer delPullDataByIds(List<Integer> delPullIds);

    /**
     * <desc>
     *      根据Id更新对应数据
     * <desc/>
     *
     * @param tableName 表名
     * @param smartCardPullPO 与旺龙一卡通对接数据存储实体对象
     * @return
     * @author zhangs
     * @createDate 2017/11/3
     */
    Integer updatePullDataById(String tableName, SmartCardPullPO smartCardPullPO);

    /**
     * <desc>
     *     更新表time_task_pull_remove_repeat中pull表名对应的数据处理状态
     * <desc/>
     *
     * @param timeTaskPullRemoveRepeatPO 存储有数据变化的pull表信息的定时任务临时表
     * @return
     * @author zhangs
     * @createDate 2017/11/3
     */
    void updateTimeTaskPullStatus(TimeTaskPullRemoveRepeatPO timeTaskPullRemoveRepeatPO);

    /**
     * <desc>
     *      在定时任务临时表中记录有数据变动的pull表
     * <desc/>
     *
     * @param timeTaskPullRemoveRepeatPO 定时任务临时表实体对象
     * @return
     * @author zhangs
     * @createDate 2017/11/3
     */
    void recordPullAtTimeTask(TimeTaskPullRemoveRepeatPO timeTaskPullRemoveRepeatPO);


    /**
     * <desc>
     *    将已处理的云端同步到一卡通的数据进行转移.
     * </desc>
     *
     * @param tableName pull表
     * @return xx
     * @author LewisLouis
     * @createDate 2018-01-09
     */
    void movePullDataToColdTable(String tableName);


    /**
     * <desc>
     *    获取所有一卡通pul表的信息，用于分析是否需要清理.
     * </desc>
     *
     * @param
     * @return pull表信息列表
     * @author LewisLouis
     * @createDate 2018-01-26
     */
    List<SmartCardPullTableInfoVO> getAllPullTablesInfo();
}
